﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameMain : MonoBehaviour
{
    public Config config;   // 游戏配置

    void Start()
    {
        // 上报游戏启动
        SDKReportHelper.DoReport(ReportType.GameStart);

        // 初始化游戏配置
        config.Init();

        // 设置成不销毁
        gameObject.isStatic = true;
        DontDestroyOnLoad(gameObject);

        // 帧率
        Application.targetFrameRate = Config.FrameRate;

        // 屏幕常亮
        if (Config.Instance.NeverSleep)
            Screen.sleepTimeout = SleepTimeout.NeverSleep;

        // 设置日志等级
        Debuger.LogLevel = Config.Instance.LogLevel;

        // 初始化框架
        StartCoroutine(InitFramework());
    }

    IEnumerator InitFramework()
    {
        yield return null;

        // 上报框架初始化
        SDKReportHelper.DoReport(ReportType.FrameworkInit);

        // 初始化模块
        Framework.Instance.AddModule(new MessageManager());
        Framework.Instance.AddModule(new TimeManager());
        Framework.Instance.AddModule(new PoolManager());
        Framework.Instance.AddModule(new NativeManager());
        Framework.Instance.AddModule(new LoadManager());
        Framework.Instance.AddModule(new SpriteAssetManager());
        //Framework.Instance.AddModule(new SoundManager());
        Framework.Instance.AddModule(new LuaManager());
        Framework.Instance.AddModule(new UIManager());

        // 上报框架初始化完成
        SDKReportHelper.DoReport(ReportType.FrameworkInitFinish);

        // 初始化游戏
        InitGame();

        // 初始化调试器
        InitDebugger();

        // 启动游戏
        StartGame();
    }

    void InitGame()
    {
        // 上报模块初始化
        SDKReportHelper.DoReport(ReportType.ModuleInit);

        // 初始化各模块
        Framework.Instance.InitModule();

        // 上报模块初始化完成
        SDKReportHelper.DoReport(ReportType.ModuleInitFinish);
    }

    // 初始化调试器
    void InitDebugger()
    {
        AddDebuger<DK_PdrConsoleWindow>(Config.Release != ReleaseType.RELEASE);
        AddDebuger<ErrorManager>(true);
    }

    void StartGame()
    {
        // 启动游戏
        SDKReportHelper.DoReport(ReportType.StartGame);

        // 启动Lua模块
        new EventQueue(null, EventID.START_LUA).Post();

        // 打开界面
        UIManager.Instance.OpenView(ViewDefine.MainGameView);
    }

    void Update()
    {
        Framework.Instance.Update();
    }

    // 增加调试器
    void AddDebuger<T>(bool need) where T : Component
    {
        if (need)
        {
            if (gameObject.GetComponent(typeof(T)) == null)
            {
                gameObject.AddComponent(typeof(T));
            }
        }
    }
}